<!DOCTYPE html>
<html lang="zn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>逻辑运算符</title>
    <script>
        /*
            JS中为我们提供了三种逻辑运算符
            !非
                -！可以用来对一个值进行非运算
                -所谓非运算就是指对一个布尔值进行取反操作
                    true变false     false变true
                -如果对一个值进行两次取反，他不会变化
                -如果对非布尔值进行，则会将其转换为布尔值，然后再取反
                所以我们可以利用该特点，来将一个其它的数据类型转换为布尔值，原理和Boolean函数一样 

            &&与
                -&&可以对符号两侧的值进行与运算并返回结果
                -运算规则
                    -两个值中只要有一个值为false就返回false，只有两个值都为true时，才会返回true
                    -js中的与属于短路的与，如果第一个值为false，则不会看第二个值
            
            ||或
                -||可以对符号两侧的值进行或运算并返回结果
                -运算规则
                    -两个值中只要有一个true，就返回true
                        如果两个值都为false，才返回false
                    -JS中的或属于短路的或
                        如果第一个值为true，则不会检查第二个值
        */
        // 如果两个值都是true则返回true
        var result = true&&true;

        // 只要有一个false，就返回false
        result = true&&false;
        result = false&&true;
        result = false&&false;

        console.log("result="+result);

        // 第一个值为true，会检查第二个值
        // true&&alert("看我出不出来");

        // 第一个值为false，不会检查第二个值
        false&&alert("看我出不出来");

        // 只要有一个true，就返回true
        result = true||false;
        result = false||true;
        result = true||true;
        console.log("result="+result);

        // 第一个值为false，则会检查第二个值
        // false||alert('snow')

        // 第一个值为true，则不会检查第二个值
        true||alert("snow")

        var a = false;

        // 对a进行非运算
        a = !a;

        console.log("a="+a);

        var b =10;
        b = !!b;
        console.log("b="+b);
        console.log(typeof b);
    </script>
</head>
<body>
    
</body>
</html>